package com.banmoon.prototype;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import org.apache.commons.beanutils.BeanUtils;

import java.lang.reflect.InvocationTargetException;

public class CopyUtilMain {

    public static void main(String[] args) throws InvocationTargetException, IllegalAccessException, InstantiationException, NoSuchMethodException {
        Sheep sheep = new Sheep("多莉", 6, "白色");
        Estanciero estanciero = new Estanciero("农场主A", CollUtil.newArrayList(sheep));
        System.out.println(estanciero);

        System.out.println(System.lineSeparator() + "=========== 分割线 Apache ===========");
        Estanciero estanciero1 = (Estanciero) BeanUtils.cloneBean(estanciero);
        System.out.println(estanciero1);
        System.out.println(StrUtil.format("农场主是否一致：{}，羊是否一致：{}",
                estanciero==estanciero1, estanciero.getSheepList()==estanciero1.getSheepList()));

        System.out.println(System.lineSeparator() + "=========== 分割线 Spring ===========");
        Estanciero estanciero2 = new Estanciero();
        org.springframework.beans.BeanUtils.copyProperties(estanciero, estanciero2);
        System.out.println(estanciero2);
        System.out.println(StrUtil.format("农场主是否一致：{}，羊是否一致：{}",
                estanciero==estanciero2, estanciero.getSheepList()==estanciero2.getSheepList()));

        System.out.println(System.lineSeparator() + "=========== 分割线 fastjson序列化 ===========");
        Estanciero estanciero3 = JSON.parseObject(JSON.toJSONString(estanciero), Estanciero.class);
        System.out.println(estanciero3);
        System.out.println(StrUtil.format("农场主是否一致：{}，羊是否一致：{}",
                estanciero==estanciero3, estanciero.getSheepList()==estanciero3.getSheepList()));
    }

}
